// (C) 2022 Intel Corporation. All rights reserved.
// Your use of Intel Corporation's design tools, logic functions and other 
// software and tools, and its AMPP partner logic functions, and any output 
// files from any of the foregoing (including device programming or simulation 
// files), and any associated documentation or information are expressly subject 
// to the terms and conditions of the Intel Program License Subscription 
// Agreement, Intel FPGA IP License Agreement, or other applicable 
// license agreement, including, without limitation, that your use is for the 
// sole purpose of programming logic devices manufactured by Intel and sold by 
// Intel or its authorized distributors.  Please refer to the applicable 
// agreement for further details.

module A_cse_ocs_dpa_aes10c_gf16_pows
	#(
	   parameter POLY1 = 3
	 )
	(
	   input logic [3:0] a,
           output logic [3:0] a_2,
	   output logic [3:0] a_4,
	   output logic [3:0] a_8
	);

	wire [3:0] temp_2, temp_4, temp_8;
	assign { a_2, a_4, a_8 } = { temp_2, temp_4, temp_8 };

	// Combinational logic to compute powers of a
	A_cse_ocs_dpa_aes10c_gf16_mul #(.POLY1(POLY1)) pows_mul0 ( .a(a), .b(a), .o(temp_2) );
	A_cse_ocs_dpa_aes10c_gf16_mul #(.POLY1(POLY1)) pows_mul1 ( .a(a_2), .b(a_2), .o(temp_4) );
	A_cse_ocs_dpa_aes10c_gf16_mul #(.POLY1(POLY1)) pows_mul2 ( .a(a_4), .b(a_4), .o(temp_8) );

endmodule
